home *** CD-ROM | disk | FTP | other *** search
/ SGI Hot Mix 17 / Hot Mix 17.iso / HM17_SGI / research / lib / xsurface.pro < prev    next >
Text File  |  1997-07-08  |  19KB  |  660 lines

  1. ; $Id: xsurface.pro,v 1.5 1997/01/15 03:11:50 ali Exp $
  2. ;
  3. ; Copyright (c) 1991-1997, Research Systems, Inc.  All rights reserved.
  4. ;    Unauthorized reproduction prohibited.
  5. ;+
  6. ; NAME:
  7. ;    XSURFACE
  8. ;
  9. ; PURPOSE:
  10. ;    This routine provides a graphical interface to the SURFACE and
  11. ;    SHADE_SURFACE commands.  Different controls are provided to change 
  12. ;    the viewing angle and other plot parameters.  The command used to 
  13. ;    generate the resulting surface plot is shown in a text window.
  14. ;
  15. ; CATEGORY:
  16. ;    Widgets.
  17. ;
  18. ; CALLING SEQUENCE:
  19. ;    XSURFACE, Data
  20. ;
  21. ; INPUT PARAMETERS:
  22. ;    Data:    The two-dimensional array to display as a wire-mesh or
  23. ;        shaded surface.
  24. ;
  25. ; KEYWORD PARAMETERS:
  26. ;    GROUP:    The widget ID of the widget that calls XSURFACE.  When this
  27. ;        keyword is specified, the death of the caller results in the
  28. ;        death of XSURFACE.
  29. ;
  30. ; SIDE EFFECTS:
  31. ;    The XMANAGER is initiated if it is not already running.
  32. ;
  33. ; RESTRICTIONS:
  34. ;    XSURFACE does not accept any of the keywords that the IDL command 
  35. ;    SURFACE does.
  36. ;
  37. ; PROCEDURE:
  38. ;    Create and register the widget with the XMANAGER and then exit.
  39. ;
  40. ; MODIFICATION HISTORY:
  41. ;    Created from a template written by: Steve Richards, January, 1991.
  42. ;-
  43.  
  44. ;------------------------------------------------------------------------------
  45. ;    procedure XSurface_draw
  46. ;------------------------------------------------------------------------------
  47.  
  48. PRO XSurface_draw
  49.  
  50. COMMON orientation, zrot, thedata, xrot, skirt, shade, axes, thedraw, $
  51.         xmargin, ymargin, upper, commandid
  52.  
  53. save_win = !D.WINDOW
  54. WSET, thedraw
  55.  
  56. IF(shade EQ 0) THEN BEGIN
  57.   IF(skirt EQ 0) THEN $
  58.     SURFACE, thedata, $
  59.         XSTYLE = axes, $
  60.         YSTYLE = axes, $
  61.         ZSTYLE = axes, $
  62.         UPPER_ONLY = upper, $
  63.         XMARGIN = xmargin, $
  64.         YMARGIN = ymargin, $
  65.         AZ = zrot, $
  66.         AX = xrot $
  67.   ELSE SURFACE, thedata, $
  68.         XSTYLE = axes, $
  69.         YSTYLE = axes, $
  70.         ZSTYLE = axes, $
  71.         UPPER_ONLY = upper, $
  72.         XMARGIN = xmargin, $
  73.         YMARGIN = ymargin, $
  74.         AZ = zrot, $
  75.         AX = xrot, $
  76.         SKIRT = MIN(thedata)
  77. ENDIF ELSE BEGIN
  78.   IF(skirt EQ 0) THEN $
  79.     SHADE_SURF, thedata, $
  80.         XSTYLE = axes, $
  81.         YSTYLE = axes, $
  82.         ZSTYLE = axes, $
  83.         UPPER_ONLY = upper, $
  84.         XMARGIN = xmargin, $
  85.         YMARGIN = ymargin, $
  86.         AZ = zrot, $
  87.         AX = xrot $
  88.     ELSE SHADE_SURF, thedata, $
  89.         XSTYLE = axes, $
  90.         YSTYLE = axes, $
  91.         ZSTYLE = axes, $
  92.         UPPER_ONLY = upper, $
  93.         XMARGIN = xmargin, $
  94.         YMARGIN = ymargin, $
  95.         AZ = zrot, $
  96.         AX = xrot, $
  97.         SKIRT = MIN(thedata)
  98. ENDELSE
  99.  
  100. IF(shade EQ 0) THEN command = "SURFACE, data" $
  101. ELSE command = "SHADE_SURF, data"
  102. IF(xrot NE 30.0) THEN command = command + STRING(xrot, $
  103.                     FORMAT = '(", AX = ",I3.3)')
  104. IF(zrot NE 30.0) THEN command = command + STRING(zrot, $
  105.                     FORMAT = '(", AZ = ",I3.3)')
  106. IF(skirt NE 0) THEN command = command + ", /SKIRT"
  107. IF(xmargin[0] NE 10.0) THEN $
  108.     command = command + STRING(xmargin, $
  109.     FORMAT = '(", XMARGIN = [",F4.1,", ",F4.1,"]")')
  110. IF(ymargin[0] NE 4.0) THEN $
  111.     command = command + STRING(ymargin, $
  112.     FORMAT = '(", YMARGIN = [",F4.1,", ",F4.1,"]")')
  113. IF(upper NE 0) THEN command = command + ", /UPPER_ONLY"
  114. IF(axes NE 0) THEN command = command + $
  115.     ", XSTYLE = 4, YSTYLE = 4, ZSTYLE = 4"
  116.  
  117. WIDGET_CONTROL, commandid, SET_VALUE = command
  118. WSET, save_win
  119.  
  120. END
  121.  
  122.  
  123. ;------------------------------------------------------------------------------
  124. ;    procedure XSurface_ev
  125. ;------------------------------------------------------------------------------
  126.  
  127. PRO XSurface_ev, event
  128.  
  129. COMMON orientation, zrot, thedata, xrot, skirt, shade, axes, thedraw, $
  130.         xmargin, ymargin, upper, commandid
  131.  
  132. WIDGET_CONTROL, event.id, GET_UVALUE = eventval        ;find the user value
  133.                             ;of the widget where
  134.                             ;the event occured
  135. CASE eventval OF
  136.  
  137.   "       0": BEGIN
  138.         zrot = (zrot + 15) mod 360
  139.         IF(zrot LT 0) THEN zrot = 360 + zrot
  140.         XSurface_draw
  141.         WIDGET_CONTROL, event.id, SET_BUTTON = 0
  142.           END
  143.  
  144.   "       1": BEGIN
  145.         zrot = (zrot - 15) mod 360
  146.         IF(zrot LT 0) THEN zrot = 360 + zrot
  147.         XSurface_draw
  148.         WIDGET_CONTROL, event.id, SET_BUTTON = 0
  149.           END
  150.  
  151.   "       2": BEGIN
  152.         xrot = (xrot - 15) mod 360
  153.         IF(xrot LT 0) THEN xrot = 360 + xrot
  154.         XSurface_draw
  155.         WIDGET_CONTROL, event.id, SET_BUTTON = 0
  156.           END
  157.  
  158.   "       3": BEGIN
  159.         xrot = (xrot + 15) mod 360
  160.         IF(xrot LT 0) THEN xrot = 360 + xrot
  161.         XSurface_draw
  162.         WIDGET_CONTROL, event.id, SET_BUTTON = 0
  163.           END
  164.  
  165.   "       4": BEGIN    ;shrink
  166.         xmargin = xmargin * 1.2
  167.         ymargin = ymargin * 1.2
  168.         XSurface_draw
  169.         WIDGET_CONTROL, event.id, SET_BUTTON = 0
  170.           END
  171.  
  172.   "       5": BEGIN    ;grow
  173.         xmargin = xmargin * 0.8
  174.         ymargin = ymargin * 0.8
  175.         XSurface_draw
  176.         WIDGET_CONTROL, event.id, SET_BUTTON = 0
  177.           END
  178.  
  179.   "SKIRTON": IF(event.select EQ 1) THEN BEGIN
  180.         skirt = 1
  181.         XSurface_draw
  182.          ENDIF
  183.  
  184.   "SKIRTOFF":  IF(event.select EQ 1) THEN BEGIN
  185.         skirt = 0
  186.         XSurface_draw
  187.           ENDIF
  188.  
  189.   "SHADEOFF":  IF(event.select EQ 1) THEN BEGIN
  190.         shade = 0
  191.         XSurface_draw
  192.           ENDIF
  193.  
  194.   "SHADEON":  IF(event.select EQ 1) THEN BEGIN
  195.         shade = 1
  196.         XSurface_draw
  197.           ENDIF
  198.  
  199.   "AXESOFF":  IF(event.select EQ 1) THEN BEGIN
  200.         AXES = 4
  201.         XSurface_draw
  202.           ENDIF
  203.  
  204.   "AXESON":  IF(event.select EQ 1) THEN BEGIN
  205.         AXES = 0
  206.         XSurface_draw
  207.           ENDIF
  208.  
  209.   "UPPERON": IF(event.select EQ 1) THEN BEGIN
  210.         upper = 0
  211.         XSurface_draw
  212.           ENDIF
  213.  
  214.   "UPPEROFF": IF(event.select EQ 1) THEN BEGIN
  215.         upper = 1
  216.         XSurface_draw
  217.           ENDIF
  218.  
  219.   "XLOADCT": XLoadct, GROUP = event.top
  220.  
  221.   "XPALETTE": XPalette, GROUP = event.top
  222.  
  223.   "XMANTOOL": XMTool, GROUP = event.top
  224.  
  225.   "EXIT": WIDGET_CONTROL, event.top, /DESTROY
  226.  
  227.   ELSE:; MESSAGE, "Event User Value Not Found"
  228.  
  229. ENDCASE
  230.  
  231. END ;============= end of XSurface event handling routine task =============
  232.  
  233.  
  234.  
  235. ;------------------------------------------------------------------------------
  236. ;    procedure XSurface
  237. ;------------------------------------------------------------------------------
  238.  
  239. PRO XSurface, DATA, GROUP = GROUP
  240.  
  241. COMMON orientation, zrot, thedata, xrot, skirt, shade, axes, thedraw, $
  242.         xmargin, ymargin, upper, commandid
  243.  
  244. IF(XRegistered("XSurface")) THEN RETURN            ;only one instance of
  245.                             ;the XSurface widget
  246.                             ;is allowed.  If it is
  247.                             ;already managed, do
  248.                             ;nothing and return
  249.  
  250. save_win = !D.WINDOW
  251. thesize = SIZE(DATA)
  252. zrot = 30.
  253. xrot = 30.
  254. skirt = 0
  255. shade = 0
  256. axes = 0
  257. xmargin = [10.0, 3.0]
  258. ymargin = [4.0, 2.0]
  259. upper = 0
  260. commandid = 0L
  261.  
  262. XSurfacebase = WIDGET_BASE(TITLE = "XSurface", $
  263.         /COLUMN)
  264. ; This is a little tricky. Setting the managed attribute indicates
  265. ; our intention to put this app under the control of XMANAGER, and
  266. ; prevents our draw widgets from becoming candidates for becoming
  267. ; the default window on WSET, -1. XMANAGER sets this, but doing it here
  268. ; prevents our own WSETs at startup from having that problem.
  269. WIDGET_CONTROL, /MANAGED, XSurfacebase
  270.  
  271. XPdMenu, [    '"Done"                EXIT',        $
  272.         '"Tools"    {',                $
  273.                 '"XLoadct"    XLOADCT',    $
  274.                 '"XPalette"    XPALETTE',    $
  275.                 '"XManagerTool"    XMANTOOL',    $
  276.                 '}'],                $
  277.      XSurfacebase
  278.  
  279. thebase = WIDGET_BASE(XSurfacebase, /ROW)
  280.  
  281. ver    = widget_info(/version)
  282. case ver.style OF
  283. 'OPEN LOOK': BEGIN
  284.       XSurfacepalette = WIDGET_BASE(thebase, $
  285.                 /COLUMN, $
  286.                 /FRAME, $
  287.                 /EXCLUSIVE)
  288.     END
  289. ELSE:        BEGIN
  290.       XSurfacepalette = WIDGET_BASE(thebase, $
  291.                 /COLUMN, $
  292.                 /FRAME)
  293.     END
  294. ENDCASE
  295.  
  296. controls = [                            $
  297.         [                        $
  298.         [000B, 000B, 000B, 000B, 000B],            $
  299.         [000B, 000B, 000B, 000B, 000B],            $
  300.         [000B, 000B, 000B, 000B, 000B],            $
  301.         [000B, 000B, 000B, 000B, 000B],            $
  302.         [000B, 000B, 000B, 000B, 000B],            $
  303.         [000B, 000B, 000B, 000B, 000B],            $
  304.         [000B, 000B, 000B, 000B, 000B],            $
  305.         [000B, 000B, 000B, 000B, 000B],            $
  306.         [000B, 000B, 000B, 000B, 000B],            $
  307.         [000B, 000B, 000B, 000B, 000B],            $
  308.         [000B, 000B, 000B, 000B, 000B],            $
  309.         [000B, 000B, 000B, 000B, 000B],            $
  310.         [000B, 248B, 255B, 063B, 000B],            $
  311.         [128B, 007B, 000B, 224B, 001B],            $
  312.         [112B, 000B, 000B, 000B, 014B],            $
  313.         [136B, 000B, 016B, 000B, 016B],            $
  314.         [052B, 000B, 048B, 000B, 056B],            $
  315.         [172B, 000B, 080B, 000B, 032B],            $
  316.         [124B, 000B, 144B, 000B, 040B],            $
  317.         [164B, 007B, 016B, 001B, 048B],            $
  318.         [012B, 248B, 031B, 062B, 056B],            $
  319.         [036B, 000B, 000B, 228B, 033B],            $
  320.         [004B, 000B, 000B, 008B, 062B],            $
  321.         [012B, 000B, 000B, 016B, 048B],            $
  322.         [036B, 000B, 000B, 016B, 032B],            $
  323.         [008B, 000B, 000B, 008B, 000B],            $
  324.         [112B, 000B, 000B, 004B, 000B],            $
  325.         [128B, 007B, 000B, 002B, 000B],            $
  326.         [000B, 248B, 031B, 001B, 000B],            $
  327.         [000B, 000B, 144B, 000B, 000B],            $
  328.         [000B, 000B, 080B, 000B, 000B],            $
  329.         [000B, 000B, 048B, 000B, 000B],            $
  330.         [000B, 000B, 016B, 000B, 000B],            $
  331.         [000B, 000B, 000B, 000B, 000B],            $
  332.         [000B, 000B, 000B, 000B, 000B],            $
  333.         [000B, 000B, 000B, 000B, 000B],            $
  334.         [000B, 000B, 000B, 000B, 000B],            $
  335.         [000B, 000B, 000B, 000B, 000B],            $
  336.         [000B, 000B, 000B, 000B, 000B],            $
  337.         [000B, 000B, 000B, 000B, 000B]            $
  338.         ],                        $
  339. ;        dnz.bmdef
  340.         [                        $
  341.         [000B, 000B, 000B, 000B, 000B],            $
  342.         [000B, 000B, 000B, 000B, 000B],            $
  343.         [000B, 000B, 000B, 000B, 000B],            $
  344.         [000B, 000B, 000B, 000B, 000B],            $
  345.         [000B, 000B, 000B, 000B, 000B],            $
  346.         [000B, 000B, 000B, 000B, 000B],            $
  347.         [000B, 000B, 000B, 000B, 000B],            $
  348.         [000B, 000B, 000B, 000B, 000B],            $
  349.         [000B, 000B, 000B, 000B, 000B],            $
  350.         [000B, 000B, 000B, 000B, 000B],            $
  351.         [000B, 000B, 000B, 000B, 000B],            $
  352.         [000B, 000B, 000B, 000B, 000B],            $
  353.         [000B, 252B, 255B, 031B, 000B],            $
  354.         [128B, 007B, 000B, 224B, 001B],            $
  355.         [112B, 000B, 000B, 000B, 014B],            $
  356.         [008B, 000B, 008B, 000B, 017B],            $
  357.         [028B, 000B, 012B, 000B, 044B],            $
  358.         [004B, 000B, 010B, 000B, 053B],            $
  359.         [020B, 000B, 009B, 000B, 062B],            $
  360.         [012B, 128B, 008B, 224B, 037B],            $
  361.         [028B, 124B, 248B, 031B, 048B],            $
  362.         [132B, 039B, 000B, 000B, 036B],            $
  363.         [124B, 016B, 000B, 000B, 032B],            $
  364.         [012B, 008B, 000B, 000B, 048B],            $
  365.         [004B, 008B, 000B, 000B, 036B],            $
  366.         [000B, 016B, 000B, 000B, 016B],            $
  367.         [000B, 032B, 000B, 000B, 014B],            $
  368.         [000B, 064B, 000B, 224B, 001B],            $
  369.         [000B, 128B, 248B, 031B, 000B],            $
  370.         [000B, 000B, 009B, 000B, 000B],            $
  371.         [000B, 000B, 010B, 000B, 000B],            $
  372.         [000B, 000B, 012B, 000B, 000B],            $
  373.         [000B, 000B, 008B, 000B, 000B],            $
  374.         [000B, 000B, 000B, 000B, 000B],            $
  375.         [000B, 000B, 000B, 000B, 000B],            $
  376.         [000B, 000B, 000B, 000B, 000B],            $
  377.         [000B, 000B, 000B, 000B, 000B],            $
  378.         [000B, 000B, 000B, 000B, 000B],            $
  379.         [000B, 000B, 000B, 000B, 000B],            $
  380.         [000B, 000B, 000B, 000B, 000B]            $
  381.         ],                        $
  382.         ;upz.bm
  383.         [                        $
  384.         [000B, 000B, 000B, 000B, 000B],            $
  385.         [000B, 000B, 000B, 000B, 000B],            $
  386.         [000B, 128B, 255B, 001B, 000B],            $
  387.         [000B, 064B, 169B, 002B, 000B],            $
  388.         [000B, 160B, 254B, 007B, 000B],            $
  389.         [000B, 160B, 068B, 000B, 000B],            $
  390.         [000B, 016B, 032B, 000B, 000B],            $
  391.         [000B, 016B, 032B, 000B, 000B],            $
  392.         [000B, 016B, 032B, 000B, 000B],            $
  393.         [000B, 016B, 032B, 000B, 000B],            $
  394.         [000B, 008B, 016B, 000B, 000B],            $
  395.         [000B, 008B, 016B, 000B, 000B],            $
  396.         [000B, 008B, 144B, 001B, 000B],            $
  397.         [000B, 008B, 112B, 006B, 000B],            $
  398.         [000B, 008B, 016B, 008B, 000B],            $
  399.         [000B, 008B, 008B, 016B, 000B],            $
  400.         [000B, 008B, 006B, 096B, 000B],            $
  401.         [000B, 008B, 001B, 128B, 000B],            $
  402.         [000B, 136B, 000B, 000B, 001B],            $
  403.         [000B, 200B, 015B, 240B, 003B],            $
  404.         [000B, 008B, 008B, 016B, 000B],            $
  405.         [000B, 008B, 008B, 016B, 000B],            $
  406.         [000B, 008B, 008B, 016B, 000B],            $
  407.         [000B, 008B, 008B, 016B, 000B],            $
  408.         [000B, 008B, 008B, 016B, 000B],            $
  409.         [000B, 008B, 008B, 016B, 000B],            $
  410.         [000B, 008B, 008B, 016B, 000B],            $
  411.         [000B, 008B, 008B, 016B, 000B],            $
  412.         [000B, 008B, 008B, 016B, 000B],            $
  413.         [000B, 008B, 008B, 016B, 000B],            $
  414.         [000B, 016B, 004B, 008B, 000B],            $
  415.         [000B, 016B, 004B, 008B, 000B],            $
  416.         [000B, 016B, 005B, 008B, 000B],            $
  417.         [000B, 080B, 004B, 008B, 000B],            $
  418.         [000B, 032B, 147B, 004B, 000B],            $
  419.         [000B, 160B, 042B, 005B, 000B],            $
  420.         [000B, 064B, 149B, 002B, 000B],            $
  421.         [000B, 128B, 255B, 001B, 000B],            $
  422.         [000B, 000B, 000B, 000B, 000B],            $
  423.         [000B, 000B, 000B, 000B, 000B]            $
  424.         ],                        $
  425.         ;dnx.bm
  426.         [                        $
  427.         [000B, 000B, 000B, 000B, 000B],            $
  428.         [000B, 000B, 000B, 000B, 000B],            $
  429.         [000B, 128B, 255B, 001B, 000B],            $
  430.         [000B, 064B, 149B, 002B, 000B],            $
  431.         [000B, 160B, 042B, 005B, 000B],            $
  432.         [000B, 032B, 147B, 004B, 000B],            $
  433.         [000B, 080B, 004B, 008B, 000B],            $
  434.         [000B, 016B, 005B, 008B, 000B],            $
  435.         [000B, 016B, 004B, 008B, 000B],            $
  436.         [000B, 016B, 004B, 008B, 000B],            $
  437.         [000B, 008B, 008B, 016B, 000B],            $
  438.         [000B, 008B, 008B, 016B, 000B],            $
  439.         [000B, 008B, 008B, 016B, 000B],            $
  440.         [000B, 008B, 008B, 016B, 000B],            $
  441.         [000B, 008B, 008B, 016B, 000B],            $
  442.         [000B, 008B, 008B, 016B, 000B],            $
  443.         [000B, 008B, 008B, 016B, 000B],            $
  444.         [000B, 008B, 008B, 016B, 000B],            $
  445.         [000B, 008B, 008B, 016B, 000B],            $
  446.         [000B, 008B, 008B, 016B, 000B],            $
  447.         [000B, 200B, 015B, 240B, 003B],            $
  448.         [000B, 136B, 000B, 000B, 001B],            $
  449.         [000B, 008B, 001B, 128B, 000B],            $
  450.         [000B, 008B, 006B, 096B, 000B],            $
  451.         [000B, 008B, 008B, 016B, 000B],            $
  452.         [000B, 008B, 016B, 008B, 000B],            $
  453.         [000B, 008B, 112B, 006B, 000B],            $
  454.         [000B, 008B, 144B, 001B, 000B],            $
  455.         [000B, 008B, 016B, 000B, 000B],            $
  456.         [000B, 008B, 016B, 000B, 000B],            $
  457.         [000B, 016B, 032B, 000B, 000B],            $
  458.         [000B, 016B, 032B, 000B, 000B],            $
  459.         [000B, 016B, 032B, 000B, 000B],            $
  460.         [000B, 016B, 032B, 000B, 000B],            $
  461.         [000B, 160B, 068B, 000B, 000B],            $
  462.         [000B, 160B, 254B, 007B, 000B],            $
  463.         [000B, 064B, 169B, 002B, 000B],            $
  464.         [000B, 128B, 255B, 001B, 000B],            $
  465.         [000B, 000B, 000B, 000B, 000B],            $
  466.         [000B, 000B, 000B, 000B, 000B]            $
  467.         ],                        $
  468.         ;shrink.bm
  469.         [                        $
  470.         [000B, 000B, 008B, 000B, 000B],            $
  471.         [000B, 000B, 008B, 000B, 000B],            $
  472.         [000B, 000B, 073B, 000B, 000B],            $
  473.         [000B, 000B, 042B, 000B, 000B],            $
  474.         [000B, 000B, 028B, 000B, 000B],            $
  475.         [000B, 000B, 008B, 000B, 000B],            $
  476.         [000B, 000B, 000B, 000B, 000B],            $
  477.         [128B, 255B, 255B, 255B, 001B],            $
  478.         [128B, 000B, 000B, 000B, 001B],            $
  479.         [128B, 000B, 000B, 000B, 001B],            $
  480.         [128B, 000B, 000B, 000B, 001B],            $
  481.         [128B, 000B, 000B, 000B, 001B],            $
  482.         [128B, 000B, 000B, 000B, 001B],            $
  483.         [128B, 000B, 000B, 000B, 001B],            $
  484.         [128B, 000B, 000B, 000B, 001B],            $
  485.         [128B, 000B, 000B, 000B, 001B],            $
  486.         [132B, 000B, 000B, 000B, 033B],            $
  487.         [136B, 000B, 000B, 000B, 017B],            $
  488.         [144B, 000B, 000B, 000B, 009B],            $
  489.         [191B, 000B, 000B, 000B, 253B],            $
  490.         [144B, 000B, 000B, 000B, 009B],            $
  491.         [136B, 000B, 000B, 000B, 017B],            $
  492.         [132B, 000B, 000B, 000B, 033B],            $
  493.         [128B, 000B, 000B, 000B, 001B],            $
  494.         [128B, 000B, 000B, 000B, 001B],            $
  495.         [128B, 000B, 000B, 000B, 001B],            $
  496.         [128B, 000B, 000B, 000B, 001B],            $
  497.         [128B, 000B, 000B, 000B, 001B],            $
  498.         [128B, 000B, 000B, 000B, 001B],            $
  499.         [128B, 000B, 000B, 000B, 001B],            $
  500.         [128B, 000B, 000B, 000B, 001B],            $
  501.         [128B, 000B, 000B, 000B, 001B],            $
  502.         [128B, 255B, 255B, 255B, 001B],            $
  503.         [000B, 000B, 000B, 000B, 000B],            $
  504.         [000B, 000B, 008B, 000B, 000B],            $
  505.         [000B, 000B, 028B, 000B, 000B],            $
  506.         [000B, 000B, 042B, 000B, 000B],            $
  507.         [000B, 000B, 073B, 000B, 000B],            $
  508.         [000B, 000B, 008B, 000B, 000B],            $
  509.         [000B, 000B, 008B, 000B, 000B]            $
  510.         ],                        $
  511.         ;grow.bm
  512.         [                        $
  513.         [000B, 000B, 000B, 000B, 000B],            $
  514.         [000B, 000B, 000B, 000B, 000B],            $
  515.         [000B, 000B, 000B, 000B, 000B],            $
  516.         [248B, 255B, 255B, 255B, 031B],            $
  517.         [008B, 000B, 000B, 000B, 016B],            $
  518.         [008B, 000B, 008B, 000B, 016B],            $
  519.         [008B, 000B, 028B, 000B, 016B],            $
  520.         [008B, 000B, 042B, 000B, 016B],            $
  521.         [008B, 000B, 073B, 000B, 016B],            $
  522.         [008B, 000B, 008B, 000B, 016B],            $
  523.         [008B, 000B, 008B, 000B, 016B],            $
  524.         [008B, 000B, 008B, 000B, 016B],            $
  525.         [008B, 000B, 008B, 000B, 016B],            $
  526.         [008B, 000B, 008B, 000B, 016B],            $
  527.         [008B, 000B, 000B, 000B, 016B],            $
  528.         [008B, 000B, 000B, 000B, 016B],            $
  529.         [008B, 001B, 000B, 000B, 016B],            $
  530.         [136B, 000B, 000B, 128B, 016B],            $
  531.         [072B, 000B, 000B, 000B, 017B],            $
  532.         [232B, 063B, 000B, 000B, 018B],            $
  533.         [072B, 000B, 000B, 252B, 023B],            $
  534.         [136B, 000B, 000B, 000B, 018B],            $
  535.         [008B, 001B, 000B, 000B, 017B],            $
  536.         [008B, 000B, 000B, 128B, 016B],            $
  537.         [008B, 000B, 000B, 000B, 016B],            $
  538.         [008B, 000B, 000B, 000B, 016B],            $
  539.         [008B, 000B, 000B, 000B, 016B],            $
  540.         [008B, 000B, 016B, 000B, 016B],            $
  541.         [008B, 000B, 016B, 000B, 016B],            $
  542.         [008B, 000B, 016B, 000B, 016B],            $
  543.         [008B, 000B, 016B, 000B, 016B],            $
  544.         [008B, 000B, 146B, 000B, 016B],            $
  545.         [008B, 000B, 084B, 000B, 016B],            $
  546.         [008B, 000B, 056B, 000B, 016B],            $
  547.         [008B, 000B, 016B, 000B, 016B],            $
  548.         [008B, 000B, 000B, 000B, 016B],            $
  549.         [248B, 255B, 255B, 255B, 031B],            $
  550.         [000B, 000B, 000B, 000B, 000B],            $
  551.         [000B, 000B, 000B, 000B, 000B],            $
  552.         [000B, 000B, 000B, 000B, 000B]            $
  553.         ]                        $
  554.        ]
  555.  
  556. FOR i = 0,N_ELEMENTS(controls[0,0,*])-1 DO $
  557.   toss = WIDGET_BUTTON(XSurfacepalette, $
  558.         VALUE = controls[*,*,i], $
  559.         UVALUE = STRING(i))
  560.  
  561. XSurfacedisplay = WIDGET_DRAW(thebase, $
  562.         XSIZE = 375, $
  563.         YSIZE = 300, $
  564.         RETAIN = 2)
  565.  
  566. XSurfacecontrols = WIDGET_BASE(XSurfacebase, $
  567.         /ROW)
  568.  
  569. skirtbase = WIDGET_BASE(XSurfacecontrols, $
  570.         /COLUMN, $
  571.         /EXCLUSIVE, $
  572.         /FRAME)
  573.  
  574. skirtoff = WIDGET_BUTTON(skirtbase, $
  575.         VALUE = "No Skirt", $
  576.         UVALUE = "SKIRTOFF")
  577.  
  578. skirton = WIDGET_BUTTON(skirtbase, $
  579.         VALUE = "Skirt", $
  580.         UVALUE = "SKIRTON")
  581.  
  582. shadebase = WIDGET_BASE(XSurfacecontrols, $
  583.         /COLUMN, $
  584.         /EXCLUSIVE, $
  585.         /FRAME)
  586.  
  587. shadeoff = WIDGET_BUTTON(shadebase, $
  588.         VALUE = "Wire Frame", $
  589.         UVALUE = "SHADEOFF")
  590.  
  591. shadeon = WIDGET_BUTTON(shadebase, $
  592.         VALUE = "Shaded Surface", $
  593.         UVALUE = "SHADEON")
  594.  
  595.  
  596. axesbase = WIDGET_BASE(XSurfacecontrols, $
  597.         /COLUMN, $
  598.         /EXCLUSIVE, $
  599.         /FRAME)
  600.  
  601. axeson = WIDGET_BUTTON(axesbase, $
  602.         VALUE = "Show Axes", $
  603.         UVALUE = "AXESON")
  604.  
  605. axesoff = WIDGET_BUTTON(axesbase, $
  606.         VALUE = "Hide Axes", $
  607.         UVALUE = "AXESOFF")
  608.  
  609. upperbase = WIDGET_BASE(XSurfacecontrols, $
  610.         /COLUMN, $
  611.         /EXCLUSIVE, $
  612.         /FRAME)
  613.  
  614. upperon = WIDGET_BUTTON(upperbase, $
  615.         VALUE = "Show Top and Bottom", $
  616.         UVALUE = "UPPERON")
  617.  
  618. upperoff = WIDGET_BUTTON(upperbase, $
  619.         VALUE = "Only Show Top", $
  620.         UVALUE = "UPPEROFF")
  621.  
  622. commandbase = WIDGET_BASE(XSurfacebase, $
  623.         /FRAME, $
  624.         /COLUMN)
  625.  
  626. commandlabel = WIDGET_LABEL(commandbase, $
  627.         VALUE = "IDL Commmand To Produce Above Output:")
  628.  
  629. case ver.style of
  630. 'OPEN LOOK':  commandid = WIDGET_LABEL(commandbase, VALUE = "SURFACE, data")
  631. ELSE:          commandid = WIDGET_TEXT(commandbase, $
  632.                 VALUE = "SURFACE, data", $
  633.                 /SCROLL, $
  634.                 YSIZE = 1)
  635. ENDCASE
  636.  
  637. WIDGET_CONTROL, XSurfacebase, /REALIZE            ;create the widgets
  638.                             ;that is defined
  639.  
  640. WIDGET_CONTROL, skirtoff, /SET_BUTTON
  641. WIDGET_CONTROL, shadeoff, /SET_BUTTON
  642. WIDGET_CONTROL, axeson, /SET_BUTTON
  643. WIDGET_CONTROL, upperon, /SET_BUTTON
  644. WIDGET_CONTROL, XSurfacedisplay, GET_VALUE = temp & thedraw = temp
  645.  
  646. IF(N_PARAMS() gt 0) THEN BEGIN
  647.     thedata = DATA
  648.     XSurface_draw
  649. END
  650.  
  651. WSET, SAVE_WIN
  652. XManager, "XSurface", XSurfacebase, $            ;register the widgets
  653.         EVENT_HANDLER = "XSurface_ev", $    ;with the XManager
  654.         GROUP_LEADER = GROUP, /NO_BLOCK
  655.  
  656. END ;================ end of XSurface background task =====================
  657.  
  658.  
  659.  
  660.